<?php

require_once 'OperacoesBD.php';
require_once 'ConectaDB.php';
require_once 'DBProfessor.php';
require_once 'DBAluno.php';
require_once 'DBBanca.php';
require_once 'DBTcc.php';

/**
 * Classe responsável por tratar toda as alterações referentes a tabela Defesa no banco de dados,
 * ela implementa a interface OperacoesBD, afim de garantir que os métodos básicos de inserção, 
 * consulta, edição e exclusão de dados sejam implementados na aplicação.
 * 
 * @author gabrielbmoro
 */
class DBDefesa implements OperacoesBD {

    private $conection;
    private $table;
    private $bdConection;
    private $dbBanca;
    private $dbProfessor;
    private $dbAluno;
    private $dbTcc;

    /* O método construtor inicializará os dados: recuperando a conecção com o banco de dados, 
      inicializando o nome da tabela e recuperando o objeto mediador com a base de dados */

    public function __construct() {
        $this->conection = ConectaDB::singleton();
        $this->bdConection = $this->conection->getBCConection();
        $this->table = "`Defesa`";

        $this->dbBanca = new DBBanca();
        $this->dbProfessor = new DBProfessor();
        $this->dbAluno = new DBAluno();
        $this->dbTcc = new DBTcc();
    }

    /* Método responsável por inserir dados na tabela */

    public function inserir($dado) {
        $listNomeProfessores = $dado[0];
        $horario = $dado[1];
        $data = $dado[2];
        $numSala = $dado[3];
        $nomeAluno = $dado[4];

        $arraylistIdProfessores = $this->dbProfessor->recuperaIdProfessor($listNomeProfessores);

        $idAluno = $this->dbAluno->recuperaIdAluno($nomeAluno);
        $idTcc = $this->dbTcc->recuperaIdTcc($idAluno);


        $insertBanca = null;
        if (sizeof($arraylistIdProfessores) == 3) {
            $insertBanca = "$arraylistIdProfessores[0],$arraylistIdProfessores[1],$arraylistIdProfessores[2]";
        } else {
            $insertBanca = "$arraylistIdProfessores[0],$arraylistIdProfessores[1]";
        }

        $result1 = $this->dbBanca->inserir($insertBanca);

        if ($result1 == true) {

            $idBanca = $this->dbBanca->recuperarIdBanca($arraylistIdProfessores);
            $valor = $idBanca . ",\"" . $numSala . "\",\"" . $data . "\",\"" . $horario . "\"," . $idTcc;
            $colunas = "`idBanca`,`numeroSala`,`data`,`horario`,`idTcc`";
            $resultSet = $this->bdConection->query("INSERT INTO " . $this->table . "(" . $colunas . ") VALUES(" . $valor . ");");

            if ($resultSet) {
                return true;
            } else {
                return false;
            }
        }

        return false;
    }

    /* Método responsável por recuperar os dados de acordo com o idTcc */

    public function recuperar($campoCondicional) {
        $idAluno = $this->dbAluno->recuperaIdAluno($campoCondicional);
        $idTcc = $this->dbTcc->recuperaIdTcc($idAluno);
        $campo = "`idDefesa`";
        $colunas = "`idBanca`,`numeroSala`,`data`,`horario`";
        $arrayResult = null;
        $count = 0;
        if (isset($this->conection)) {
            $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " .
                    $this->table . " WHERE `idTcc`=" . $idTcc . ";");

            while ($row = $resultSet->fetch_object()) {
                $arrayResult[$count] = $row->idBanca;
                $arrayResult[$count + 1] = $row->numeroSala;
                $arrayResult[$count + 2] = $row->data;
                $arrayResult[$count + 3] = $row->horario;
                $arrayResult[$count + 4] = $idTcc;
            }

            return $arrayResult;
        }
    }

    /* Método responsável por editar os dados da tabela */

    public function editar($campo, $dado) {
        if (isset($this->conection)) {
            $resultSet = $this->bdConection->query("UPDATE " . $this->table . " SET `numeroSala`=\"" .
                    $dado[0] . "\", `data`=\"" . $dado[1] . "\", `horario`= \"" . $dado[2] . "\" WHERE `idTcc`= " . $dado[3] . ";");
            return $resultSet;
        } else {
            return null;
        }
    }

    /* Método que recupera o idBanca de acordo como idTcc */

    public function recuperaIdBanca($idAluno) {
        $colunas = "`idBanca`";
        $arrayResult = null;
        if (isset($this->conection)) {
            $idTcc = $this->dbTcc->recuperaIdTcc($idAluno);
            $resultSet = $this->bdConection->query("SELECT " . $colunas . " FROM " .
                    $this->table . " WHERE `idTcc`=" . $idTcc . ";");

            while ($row = $resultSet->fetch_object()) {
                $arrayResult = $row->idBanca;
            }

            return $arrayResult;
        }
    }

    public function deletar($dado) {
        
    }

}
